package com.spzx.product.controller;


import com.github.pagehelper.PageHelper;
import com.spzx.common.core.constant.SecurityConstants;

import com.spzx.common.core.web.controller.BaseController;
import com.spzx.common.core.web.domain.AjaxResult;
import com.spzx.common.core.web.page.TableDataInfo;
import com.spzx.common.security.utils.SecurityUtils;
import com.spzx.product.api.vo.ProductSkuVo;
import com.spzx.product.service.*;
import com.spzx.product.vo.*;
import com.spzx.user.api.RemoteUserBrowseHistoryService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 聚合数据控制器
 * 用于处理与频道相关的请求，提供首页数据等接口
 */
@Slf4j
@Tag(name = "聚合数据")
@RestController
@RequestMapping("/channel")
public class ChannelController extends BaseController {

    /**
     * 类别服务接口
     */
    @Autowired
    private ICategoryService categoryService;

    @Autowired
    private IChannelService channelService;

    /**
     * 商品SKU服务接口
     */
    @Autowired
    private IProductSkuService productSkuService;

    /**
     * 获取首页数据
     *
     * @return 包含首页数据的AjaxResult对象
     */
    @Operation(summary = "获取首页数据")
    @GetMapping("/index")
    public AjaxResult index() {

        IndexDataVo indexDataVo = channelService.index();
        return success(indexDataVo);
    }

    /**
     * 获取分类嵌套列表
     * 通过GET请求访问/category端点，返回分类的树形结构列表
     * 使用AjaxResult作为返回类型，封装了HTTP请求的结果
     *
     * @return 包含分类树形结构的AjaxResult对象
     */
    @Operation(summary = "获取分类嵌套列表")
    @GetMapping("/category")
    public AjaxResult category() {
        // 调用categoryService的tree方法获取分类树形结构，并通过success方法封装成功的结果
        return success(categoryService.tree());
    }

    @Operation(summary = "显示商品列表")
    @GetMapping("/skuList/{pageNum}/{pageSize}")
    public TableDataInfo skuList(
            @Parameter(description = "当前页码")
            @PathVariable Integer pageNum,

            @Parameter(description = "每页记录数")
            @PathVariable Integer pageSize,

            SkuQuery skuQuery) {

        PageHelper.startPage(pageNum, pageSize);
        List<ProductSkuVo> list = productSkuService.selectProductSkuList(skuQuery);
        return getDataTable(list);
    }

    @Autowired
    private IBrandService brandService;

    @Operation(summary = "获取全部品牌")
    @GetMapping("/brand")
    public AjaxResult selectBrandAll() {
        return success(brandService.list());
    }


    /**
     * 获取商品详情信息。
     *
     * @param skuId 商品SKU ID，用于标识具体的商品规格
     * @return AjaxResult 包含商品详情信息的响应结果
     */
    @Operation(summary = "商品详情")
    @GetMapping("/item/{skuId}")
    @Parameter(description = "skuId")
    public AjaxResult item(@PathVariable Long skuId) {

        //通过Feign远程调用保存浏览记录接口
        // Long userId = SecurityUtils.getLoginUser().getUserid();
        // remoteUserBrowseHistoryService.saveUserBrowseHistory(userId,skuId, SecurityConstants.INNER);
        ItemVo itemVo = channelService.getProductSkuItemVo(skuId);
        return success(itemVo);
    }

}
